package com.company.ljh.medium;

import java.util.HashMap;
import java.util.Map;

/**
 * @description:
 * 2352. 相等行列对
 * 提示
 * 中等
 * 73
 * 相关企业
 * 给你一个下标从 0 开始、大小为 n x n 的整数矩阵 grid ，返回满足 Ri 行和 Cj 列相等的行列对 (Ri, Cj) 的数目。
 *
 * 如果行和列以相同的顺序包含相同的元素（即相等的数组），则认为二者是相等的。
 * @projectName:leet_code
 * @see:com.company.ljh.medium
 * @author:ljh
 * @createTime:2023/7/3 15:51
 * @version:1.0
 */
public class 相等行列对 {
    //hashmap法，将行和列的数字分别存储为字符串，注意，为了区分每个数字，防止11,1 和 1,11组合成字符串相等的情况，需要在每个数字中间加上","
    public int equalPairs(int[][] grid) {
        HashMap<String,Integer> hangMap = new HashMap();
        HashMap <String,Integer> lieMap = new HashMap();

        //使用hashMap存储行信息
        for(int i =0; i< grid.length;i++){
            StringBuilder strHang = new StringBuilder();
            StringBuilder strLie = new StringBuilder();

            for(int j =0;j < grid[0].length;j++){
                //防止11,1 和 1,11组合成字符串相等的情况
                strHang.append(grid[i][j]+",");
                strLie.append(grid[j][i]+",");
            }
            hangMap.put(strHang.toString(),hangMap.getOrDefault(strHang.toString(),0)+1);
            lieMap.put(strLie.toString(),lieMap.getOrDefault(strLie.toString(),0)+1);
        }
        int result = 0;
        for(Map.Entry<String,Integer> hangEntry: hangMap.entrySet()){
            if(lieMap.containsKey(hangEntry.getKey())){
                result += hangEntry.getValue()*lieMap.get(hangEntry.getKey());
            }
        }
        return result;
    }
}
